<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

    <div class="box">
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
        <input type="checkbox" name="" id=""/> 测试数据<br>
    </div><br>
    <div class="box_btn">
        <button id="selectAll">全选</button>
        <button id="noselect">全不选</button>
        <button id="select">反选</button>
    </div>
</body>

<script>
    // 封装是不是数组
    function isArr( array ){
        var length = array && array.length;
        return typeof length == 'number' && length >= 0;
    }
    // 封装each方法
    function each( array , callback ){
        var i,k;
        if ( isArr(array) ) {
            for ( i = 0 ; i < array.length ; i++ ) {
                if ( callback.call( array[i],i,array[i] ) === false ) break;
            }
        }else {
            for ( k in array ) {
                if ( callback.call( array[k] , k , array[k] ) ) break;
            }
        }
        return array;
    }
    // 封装选择方法
    function checked( selector ){
        // 创建伪数组
        var arr = { length: 0 };
        // 获取元素
        var list = document.querySelectorAll( selector );
        // 将 list 中的元素加入到 arr 中
        [].push.apply( arr, list );

        // 添加方法
        arr.each = function( callback ) {
            each( arr , callback );
        };
        return arr;
    }
    // 开始使用封装代码
    /*console.log(checked('#selectAll'));*/

    // 全选
    checked( '#selectAll' )[ 0 ].onclick = function () {
        checked('.box>input').each(function(i,e){
            this.checked = true;
        });
    };
    // 全不选
    checked( '#noselect' )[0].onclick = function () {
        checked('.box>input').each(function(i,e){
            this.checked = false;
        });
    };
    // 反选
    checked( '#select' )[0].onclick = function () {
        checked( '.box>input' ).each(function(i,e){
             this.checked = !this.checked;
        });
    }
</script>
</html>